# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/10 11:55 
@Author  : ZhangShenao 
@File    : class_decorator.py 
@Desc    : 类装饰器

类装饰器主要依赖于函数__call__()
每当调用一个类的实例时,__call__()函数就会被执行一次
"""


class Counter:
    """类装饰器,统计调用次数"""

    def __init__(self, f):
        """构造函数"""

        # 初始化被包装函数
        self.__f = f

        # 初始化调用次数
        self.__call_count = 0

    def __call__(self, *args, **kwargs):
        """类的实例被调用时执行"""

        # 调用次数+1
        self.__call_count += 1
        print(f"调用次数:{self.__call_count}")

        # 调用被包装函数
        return self.__f(*args, **kwargs)


@Counter  # 使用类装饰器
def greeting(name: str):
    print(f'Hello: {name}')


if __name__ == '__main__':
    for i in range(10):
        greeting("zsa")
